package conn

import (
	"bufio"
	"bytes"
	"encoding/base64"
	"encoding/hex"
	"io"
	"strings"
)

type Msg struct {
	c             *Conn //连接实例
	*bytes.Buffer       //buffer
}

func NewMsg(c *Conn, bs []byte) *Msg {
	return &Msg{
		c:      c,
		Buffer: bytes.NewBuffer(bs),
	}
}

func (this *Msg) Conn() *Conn {
	return this.c
}

func (this *Msg) Key() string {
	return this.c.GetKey()
}

func (this *Msg) Error() string {
	return this.String()
}

func (this *Msg) HEX() string {
	return strings.ToUpper(hex.EncodeToString(this.Bytes()))
}

func (this *Msg) Base64() string {
	return base64.StdEncoding.EncodeToString(this.Bytes())
}

func (this *Msg) WriteBytes(bs []byte) error {
	_, err := this.Buffer.Write(bs)
	return err
}

func (this *Msg) CopyTo(dst io.Writer) error {
	_, err := io.Copy(dst, this)
	return err
}

func (this *Msg) CopyOf(src io.Reader) error {
	_, err := io.Copy(this, src)
	return err
}

func (this *Msg) Reader() *bufio.Reader {
	return bufio.NewReader(this)
}

func (this *Msg) Writer() *bufio.Writer {
	return bufio.NewWriter(this)
}
